From: Carlos Garnacho Date: Thu, 15 Feb 2018 11:18:59 +0000 (+0100) Subject: keyboard: Implement Key object 'long-press' signal X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~994^2^2~33 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=d8fd7b5a44494cbfefc106e338e6068519240849;p=gnome-shell.git keyboard: Implement Key object 'long-press' signal This signal may be emitted on any key, regardless of extended keys, so make the timeout useful for both situations. https://gitlab.gnome.org/GNOME/gnome-shell/issues/46 --- diff --git a/js/ui/keyboard.js b/js/ui/keyboard.js index ad973685d..ea66b8375 100644 --- a/js/ui/keyboard.js +++ b/js/ui/keyboard.js @@ -263,6 +263,7 @@ var Key = new Lang.Class({ this._capturedPress = false; this._capturedEventId = 0; this._unmapId = 0; + this._longPress = false; }, _onDestroy: function() { @@ -298,16 +299,25 @@ var Key = new Lang.Class({ _press: function(key) { if (key != this.key || this._extended_keys.length == 0) { this.emit('pressed', this._getKeyval(key), key); - } else if (key == this.key) { + } + + if (key == this.key) { this._pressTimeoutId = GLib.timeout_add(GLib.PRIORITY_DEFAULT, KEY_LONG_PRESS_TIME, Lang.bind(this, function() { - this.keyButton.set_hover(false); - this.keyButton.fake_release(); + this._longPress = true; this._pressTimeoutId = 0; - this._touchPressed = false; - this._ensureExtendedKeysPopup(); - this._showSubkeys(); + + this.emit('long-press'); + + if (this._extended_keys.length > 0) { + this._touchPressed = false; + this.keyButton.set_hover(false); + this.keyButton.fake_release(); + this._ensureExtendedKeysPopup(); + this._showSubkeys(); + } + return GLib.SOURCE_REMOVE; })); } @@ -317,11 +327,14 @@ var Key = new Lang.Class({ if (this._pressTimeoutId != 0) { GLib.source_remove(this._pressTimeoutId); this._pressTimeoutId = 0; - this.emit('pressed', this._getKeyval(key), key); } + if (!this._longPress && key == this.key && this._extended_keys.length > 0) + this.emit('pressed', this._getKeyval(key), key); + this.emit('released', this._getKeyval(key), key); this._hideSubkeys(); + this._longPress = false; }, _onCapturedEvent: function(actor, event) {